﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using LWJ_Tp_final.Models;


namespace LWJ_Tp_final_Administracion.Controllers
{
    [Authorize]
    public class EmpresaController : Controller
    {

        private DataContext BaseDeDatos = new DataContext();

        public ActionResult Index()
        {
            var empresa = BaseDeDatos.Empresas.ToList();
            return View(model: empresa);
        }

        //AGREGAR
        [HttpGet]
        public ActionResult Agregar()
        {
            return View();
        }
        [HttpPost]
        public ActionResult Agregar(Empresa empresa)
        {
            if (ModelState.IsValid)
            {
                foreach (var item in BaseDeDatos.Empresas)
                {
                    if (item.Nombre == empresa.Nombre || item.Codigo == empresa.Codigo)
                    {
                        ViewBag.Error = true;
                        return View("Agregar", model: empresa);
                    }
                }
                BaseDeDatos.Empresas.Add(empresa);
                BaseDeDatos.SaveChanges();
                return RedirectToAction("index", "empresa");
            }
            else
            {
                ViewBag.Error = true;
                return View("Agregar", model: empresa);
            }
        }

        //MODIFICAR
        [HttpGet]
        public ActionResult Modificar()
        {
            return View();
        }
        [HttpPost]
        public ActionResult Modificar(Empresa empresa)
        {
            Empresa auxEmpresa = new Empresa();

            if (!(ModelState.IsValid))
            {
                ViewBag.Error = true;
                return View("Modificar", model: empresa);
            }
            else
            {
                auxEmpresa = BaseDeDatos.Empresas.Find(empresa.Id);
          
                if (empresa.Nombre != auxEmpresa.Nombre || empresa.Codigo != auxEmpresa.Codigo)
                {
                    foreach (var item in BaseDeDatos.Empresas)
                    {
            //verifica que tanto el Nombre como el Codigo de la Empresa no esten ya en la base de datos
                        if (item.Nombre == empresa.Nombre && item != auxEmpresa)
                        {
                            ViewBag.Error = true;
                            return View("Modificar", model: empresa);
                        }
                        else
                        {
                            if (item.Codigo == empresa.Codigo && item != auxEmpresa)
                            {
                                ViewBag.Error = true;
                                return View("Modificar", model: empresa);
                            }
                        }
                    }

                    auxEmpresa.Nombre = empresa.Nombre;
                    auxEmpresa.Codigo = empresa.Codigo;
                    BaseDeDatos.SaveChanges();
                    return RedirectToAction("Index", "Empresa");
                }
                else
                {
                    ViewBag.Error = true;
                    return View("Modificar", model: empresa);
                }

            }

        }
       
        //RESUMEN
        [HttpGet]
        public ActionResult Resumen()
        {
            List<Grupo> grupos = new List<Grupo>();
            return View("Resumen", model: grupos);
        }
        [HttpPost]
        public ActionResult Resumen(DateTime desde, DateTime hasta)
        {


            var busqueda = from toque in BaseDeDatos.Toques
                           where toque.FechaHora > desde && toque.FechaHora < hasta
                           group toque by toque.Empresa into grupo
                           select new Grupo { Key = grupo.Key, Count = grupo.Count() };

            return View("Resumen", model: busqueda);

        }

        //clase para la proyeccion de la empresa con su cantidad de toques
        public class Grupo
        {
            public Empresa Key { get; set; }
            public int Count { get; set; }
        }
    }
}
